概述:
這篇文章將一步一步完成使用 AWS CLI 進行 Lambda 部署的準備工作。為了讓 Node.js Lambda Function 能夠順利運行,需先建立 IAM 帳戶,然後使用 AWS CLI 來上傳程式碼。
可參考以下腳本deploy.sh
:
# 指令範例: function=LinebotHandlerNode ./deploy.sh
# function: AWS Lambda上的Function名稱, 預設值為: "LinebotHandlerNode"
# 這個指令會將 index.js, utils, .env, node_modules 打包成一個 zip 檔案, 並更新 AWS Lambda 上的 Function
functionName="${function:=LinebotHandlerNode}"
zip -r $functionName.zip index.js utils .env node_modules
aws lambda update-function-code --function-name $functionName --zip-file fileb://$functionName.zip
建立IAM Account與 AWS CLI 準備
現在,我們已經對AWS IAM有了基本的認識,將繼續探討如何準備使用 AWS CLI 進行部署。
要使用AWS CLI操作你的AWS資源(像是上傳資料到AWS S3,或更新Lambda Function),你需要先有一個IAM Acoount,我們會使用官方推薦的 IAM Identity Center 來建立這個帳戶。
具體步驟如下:
步驟1.在IAM Identity Center建立部署用的IAM Acount User
1.1 啟用 IAM Identity Center
首先我們要先啟用Identity Center。
IAM Identity Center是AWS提供的權限分配及帳號管理的介面,在這裡可以建立及分配各個工作用帳號對於AWS資源的權限。
1.2 選擇Identity Center directory作為你的身份來源(Identity Source)
在啟用 Identity Center以後,就會進入Dashboard。
Recommended setup steps 中的第一步要選擇 identity source,這邊維持使用default AWS提供的Identity Center directory。
關於Identity Source的選項
Identity Source是管理Users and Groups 的地方,可以指定以下三種來源。
(本篇我們先維持預設值: Identity Center directory)
- Identity Center directory — 預設值, 可在AWS的Identity Center directory建立 User 和 Group, 以及指定他們存取AWS account / Application
- Active Directory — 使用 AWS Directory Service 在 AWS Managed Microsoft AD directory 或者Active Directory (AD)管理Users
- External identity provider — 在外部 identity provider(IdP)管理Users, Ex: Okta or Azure Active Directory.
1.3 建立使用者(User)
點選左側的Users -> Add User, 新增一個名稱叫"henrydev"的User,跟著步驟設定帳號密碼
1.4 建立群組 (Group) 並添加使用者
- 一樣是左側,點選Groups,建立一個名稱叫”deploy-group”的Group跟著步驟設定即可
- 點選建立的Group, 選擇Add Users to Group將剛剛建立的User: henrydev加入
1.5 建立administrative Permission set並設定權限
-
點選左側的Permission sets
-
Create Permission Set
- 點選後如下圖,可以選擇預先定義好的Permission Set,或者自定義
- 這邊選擇AdministratorAccess,以符合我們部署Lambda Function的需求
- 選擇Session Time
- Default是logging1小時候就會被AWS踢掉,最多可以選到12小時
注意: 一旦Session duration time過期,就需要再取得一次credentials,才能正常存取AWS資源
把administrative permission給User/Group
- 點選左側的AWS Account,在下面的checkbox選擇自己的AWS Account,並且點選Assign users or group
- 設定User的AWS Account 存取權限
- 選擇剛剛建立的permission set, 指定給AWS Account: Henry
- 送出以後會看到Account的右邊多了 AdministratorAccess這個權限
- 至此帳號的權限設定就大功告成。
2.從AWS access portal 取得Account的temporary security credentials
- 在Dashboard從AWS access portal URL用User name / password登入
- 點選AWS Account -> Command line or programmatic access, 可以拿到設定AWS CLi時需要的Access key ID and secret access key.
我們已取得Administrator權限的Access key ID and secret access key,這組身份憑證的權限,足以部署AWS資源。下一步就可以用這組身份認證,去設定AWS CLI的驗證資訊。
3.設定AWS CLI使用的驗證資訊
-
依照官網步驟安裝好AWS CLI後,在console輸入"aws configure",按照訊息提示,輸入剛剛取得的Access Key Id和 Access Key等資訊:
- Default region name可在IAM Identity Center-> Dashboard中的Region找到:
export AWS_ACCESS_KEY_ID=”你的ACCESS_KEY_ID”
export AWS_SECRET_ACCESS_KEY="你的ACCESS_KEY"
export AWS_SESSION_TOKEN="你的ACCESS_TOKEN"
- 也可以在~/.aws/credentials貼上:
aws_access_key_id="你的ACCESS_KEY_ID"
aws_secret_access_key="你的ACCESS_KEY"
aws_session_token="你的ACCESS_TOKEN"
至此,我們已完成了所有使用AWS CLI的準備事項。接下來就可以用AWS CLI部署Lambda Function。
使用AWS CLI部署 Node.js Lambda Function
這邊只要依照官網的步驟,透過AWS CLI的 update-function-code這個指令上傳即可。
上傳指令可以參考本篇開頭的腳本內容。需要注意:
- 當Lambda Function有使用任何npm套件時,需要安裝AWS SDK for javascript (npm install aws-xray-sdk)
- 上傳前請檢查node-module有相關dependency的存在:
總結
本篇建立了一個非root的User,並且將Admin權限以及AWS Account 存取權限指派給它:
- 此帳號非root帳號
- 因為有指定AdministratorAccess權限,所以可以存取AWS resource,進行部署等工作
- 使用這個User的credentials(access_key, access_id, access_token),就可以用於AWS CLI使用下指令的方式,進行部署等工作。
- 如果Duration time過期,需要重新拿credentials才能用
至此就完成了簡單的AWS CLI部署機制,下一篇將一探Node.js Lambda Function本人。